package com.ruoyi.web.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.web.domain.AppUser;
import com.ruoyi.web.domain.RechargeRecord;
import com.ruoyi.web.dto.AppUserAddressBindDTO;
import com.ruoyi.web.dto.AppUserBindIdentityDTO;
import com.ruoyi.web.dto.AppUserCompleteDTO;
import com.ruoyi.web.dto.AppUserLoginAddressDTO;
import com.ruoyi.web.dto.AppUserLoginPasswordDTO;
import com.ruoyi.web.dto.AppUserRegisterDTO;
import com.ruoyi.web.dto.UpdateUserDto;
import com.ruoyi.web.vo.AppLoginResVO;
import com.ruoyi.web.vo.AppUserDetailVO;
import com.ruoyi.web.vo.AppUserVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * app用户Service接口
 *
 * @author ruoyi
 * @date 2022-12-28
 */
public interface IAppUserService extends IService<AppUser> {

    /**
     * 获取所有子级
     *
     * @param list list
     * @param id   id
     */
    void getAllChild(List<AppUser> list, Long id);

    /**
     * 获取app用户信息
     *
     * @return r
     */
    R<AppUserDetailVO> getAppUserDetail();

    /**
     * 修改邮箱
     *
     * @param dto dto
     * @return r
     */
    R<String> updateEmail(UpdateUserDto dto);

    /**
     * 查询app用户
     *
     * @param id app用户主键
     * @return app用户
     */
    public AppUser selectAppUserById(Long id);

    /**
     * 充值分红
     *
     * @param record r
     */
    void rechargeDistribution(RechargeRecord record);

    /**
     * 充值分红
     *
     * @param userId 用户id
     * @param amount 金额
     * @since 2023/3/17 15:01
     */
    void rechargeDistribution(Long userId, BigDecimal amount);

    /**
     * 收益分红
     *
     * @param record r
     */
    void miningDistribution(RechargeRecord record, String type);

    /**
     * 查询app用户列表
     *
     * @param appUser app用户
     * @return app用户集合
     */
    public List<AppUser> selectAppUserList(AppUser appUser);

    /**
     * 新增app用户
     *
     * @param appUser app用户
     * @return 结果
     */
    public int insertAppUser(AppUser appUser);

    /**
     * 修改app用户
     *
     * @param appUser app用户
     * @return 结果
     */
    public int updateAppUser(AppUser appUser);

    /**
     * 批量删除app用户
     *
     * @param ids 需要删除的app用户主键集合
     * @return 结果
     */
    public int deleteAppUserByIds(Long[] ids);

    /**
     * 删除app用户信息
     *
     * @param id app用户主键
     * @return 结果
     */
    public int deleteAppUserById(Long id);

    /**
     * 注册
     *
     * @param dto dto
     * @return {@link AppLoginResVO}
     * @since 2023/3/21 14:57
     */
    AppLoginResVO register(AppUserRegisterDTO dto);

    /**
     * 通过公链登录
     *
     * @param dto dto
     * @return {@link AppLoginResVO}
     * @since 2023/3/20 15:14
     */
    AppLoginResVO loginByAddress(AppUserLoginAddressDTO dto);

    /**
     * 通过手机号、密码登陆
     *
     * @param dto dto
     * @return {@link AppLoginResVO}
     * @since 2023/3/20 18:21
     */
    AppLoginResVO loginByPassword(AppUserLoginPasswordDTO dto);

    /**
     * 旧用户完善信息
     *
     * @param dto dto
     * @return {@link AppUserDetailVO}
     * @since 2023/3/20 18:08
     */
    AppUserDetailVO complete(AppUserCompleteDTO dto);

    /**
     * 浏览器注册用户绑定地址
     *
     * @param dto dto
     * @return {@link AppUserDetailVO}
     * @since 2023/3/21 15:31
     */
    AppUserDetailVO addressBind(AppUserAddressBindDTO dto);

    /**
     * 绑定身份证信息
     *
     * @param dto dto
     * @since 2023/3/29 13:47
     */
    void bindIdentity(AppUserBindIdentityDTO dto);

    /**
     * 查询下级用户
     *
     * @return {@link List< AppUserVO>}
     * @since 2023/3/29 14:36
     */
    List<AppUserVO> appListChild();
}
